<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
	</head>
	<body>
	</body>
	<script type="text/javascript">
		//重新写一个promise风格的interval
		function myInterval(callback, delay= 500){
			//几乎所有异步的方法都可以用Promise来优化
			//增加代码易读性，避免产生回调地狱
			return new Promise(resolve=>{
				//创建js原生的interval
				let n = setInterval(()=>{
					//执行回调函数
					callback(n, resolve)
				}, delay)
			})
		}
		
		let count = 10;
		
		//执行自定义的interval
		myInterval((n, resolve)=>{
			count --
			console.log(count)
			if(count===0){
				clearInterval(n)
				console.log('第1次结束')
				//interval操作结束，resolve出去，交给then操作
				resolve()
			}
		}, 100)
		.then(res=>{
			//上一个interval结束了，这里可以继续myInterval，不会发生回调地狱
			let i = 5;
			// 自定义的myInterval会返回一个promise，但是不能在内部直接.then，这样和回调地狱就一样了。需要再return到外层，由下一个.then()去处理
			return myInterval((n, resolve)=>{
				i--
				console.log(i)
				if(i===0){
					clearInterval(n)
					resolve()
				}
			}, 100)
			
		})
		.then(res=>{
			console.log('第2次结束')
		})
		.catch(err=>{})
		
		//setTimeout完全同理，其实别的异步方法也是一样的，理解promise之后，即可举一反三
	</script>
</html>
